home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / encoders / PexFnstenvSub.pm < prev    next >
Text File  |  2006-06-30  |  2KB  |  59 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Encoder::PexFnstenvSub;
  11. use strict;
  12. use base 'Msf::Encoder::XorDword';
  13. use Pex::Encoder;
  14. use Pex::x86;
  15.  
  16.  
  17. my $advanced = {
  18. };
  19.  
  20. my $info = {
  21.   'Name'    => 'Pex Variable Length Fnstenv/sub Double Word Xor Encoder',
  22.   'Version' => '$Revision: 1.15 $',
  23.   'Authors' => [ 'spoonm <ninjatools [at] hush.com>', ],
  24.   'Arch'    => [ 'x86' ],
  25.   'OS'      => [ ],
  26.   'Description'  =>  'Variable-length fnstenv/sub dword xor encoder',
  27.   'Refs'  => [ ],
  28. };
  29.  
  30. sub new {
  31.   my $class = shift; 
  32.   return($class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_));
  33. }
  34.  
  35. # w00t http://archives.neohapsis.com/archives/vuln-dev/2003-q4/0096.html
  36. # This is useful if you have a BadChar of say 0xff, and your payload is small (or insanely large)
  37. # enough to not have 0xff in your payload, which is realistic (<= 512 && > 4)
  38. sub _GenEncoder {
  39.   my $self = shift;
  40.   my $xor = shift;
  41.   my $len = shift;
  42.   my $badchars = shift;
  43.   my $xorkey = pack('V', $xor);
  44.  
  45.   # spoon's smaller variable-length fnstenv encoder
  46.   my $decoder =
  47.     Pex::x86::Sub(-((($len - 1) / 4) + 1), "ecx", $badchars).
  48.     "\xd9\xee".                         # fldz
  49.     "\xd9\x74\x24\xf4".                 # fnstenv [esp - 12]
  50.     "\x5b".                             # pop ebx
  51.     "\x81\x73\x13". $xorkey .           # xor_xor: xor DWORD [ebx + 22], xorkey
  52.     "\x83\xeb\xfc".                     # sub ebx,-4
  53.     "\xe2\xf4";                         # loop xor_xor
  54.  
  55.   return $decoder;
  56. }
  57.  
  58. 1;
  59.